Algunas veces necesitamos utilizar una o m�s tablas para obtener los datos que queremos. Por ejemplo, supongamos que el propietario del "The Coffee Break" quiere una lista de los caf�s que le compra a Acme, Inc. Esto implica informaci�n de la tabla COFFEES y tambi�n de la que vamos a crear SUPPLIERS. Este es el caso en que se necesitan los "joins" (uni�n). Una uni�n es una operaci�n de base de datos que relaciona dos o m�s tablas por medio de los valores que comparten. En nuestro ejemplo, las tablas COFFEES y SUPPLIERS tienen la columna SUP_ID, que puede ser utilizada para unirlas.
Antes de ir m�s all�, necesitamos crear la tabla SUPPLIERS y rellenarla con valores.
El sigueinte c�digo crea la tabla SUPPLIERS.
String createSUPPLIERS = "create table SUPPLIERS " + "(SUP_ID INTEGER, SUP_NAME VARCHAR(40), " + "STREET VARCHAR(40), CITY VARCHAR(20), " + "STATE CHAR(2), ZIP CHAR(5))"; stmt.executeUpdate(createSUPPLIERS);
El siguiente c�digo inserta filas para tres suministradores dentro de SUPPLIERS.
stmt.executeUpdate("insert into SUPPLIERS values (101, " + "'Acme, Inc.', '99 Market Street', 'Groundsville', " + "'CA', '95199'"); stmt.executeUpdate("Insert into SUPPLIERS values (49," + "'Superior Coffee', '1 Party Place', 'Mendocino', 'CA', " + "'95460'"); stmt.executeUpdate("Insert into SUPPLIERS values (150, " + "'The High Ground', '100 Coffee Lane', 'Meadows', 'CA', " + "'93966'");
El siguiente c�digo selecciona la tabla y nos permite verla.
ResultSet rs = stmt.executeQuery("select * from SUPPLIERS");
El resultado ser�a algo similar a esto.
SUP_ID | SUP_NAME | STREET | CITY | STATE | ZIP |
---|---|---|---|---|---|
---------- | ---------------------- | --------------------- | ---------------- | --------- | --------- |
101 | Acme, Inc. | 99 Market Street | Groundsville | CA | 95199 |
49 | Superior Coffee | 1 Party Place | Mendocino | CA | 95460 |
150 | The High Ground | 100 Coffee Lane | Meadows | CA | 93966 |
Ahora que tenemos las tablas COFFEES y SUPPLIERS, podremos proceder con el escenario en que el propietario quer�a una lista de los caf�s comprados a un suministrador particular. Los nombres de los suminstradores est�n en la tabla SUPPLIERS, y los nombres de los caf�s en la tabla COFFEES. Como ambas tablas tienen la columna SUP_ID, podemos utilizar esta columna en una uni�n. Lo siguiente que necesitamos es la forma de distinguir la columna SUP_ID a la que nos referimos. Esto se hace precediendo el nombre de la columna con el nombre de la tabla, "COFFEES.SUP_ID" para indicar que queremos referirnos a la columna SUP_ID de la tabla COFFEES. En el siguiente c�digo, donde stmt es un objeto Statement, seleccionamos los caf�s comprados a Acme, Inc..
String query = " SELECT COFFEES.COF_NAME " + "FROM COFFEES, SUPPLIERS " + "WHERE SUPPLIERS.SUP_NAME LIKE 'Acme, Inc.'" + "and SUPPLIERS.SUP_ID = COFFEES.SUP_ID"; ResultSet rs = stmt.executeQuery(query); System.out.println("Coffees bought from Acme, Inc.: "); while (rs.next()) { String coffeeName = getString("COF_NAME"); System.out.println(" " + coffeeName); }
Esto producir� la siguiente salida.
Coffees bought from Acme, Inc.. Colombian Colombian_Decaf